前言
该文章为连载的第二篇:用户注册数据分析
某家在线教育机构拥有自己开发的教育产品VLE,该教育机构提供了他们四个学期里,开展的七门课的数据,接下来我会根据这些数据,为该教育机构做一系列的数据分析,包括用户的RFM模型、用户分群特征、用户成绩分析等等。
该教育机构部分数据库结构如下
如下这一篇文章为:用户注册数据分析
studentRegistration记录了每学期每门课的用户注册信息,其中:
- code_presentation:学期
- code_module:课程
- id_student:用户编号
- date_registration:用户注册日期离开学日期的距离(如:-1,即用户在该学期该门课开学前一天注册,5即为用户在该学期该门课开学后五天注册)
- date_unregistration:用户注销日期离开学日期的距离
我们现在要计算并且可视化
- 用户注册日期分布
- 用户延迟注册率
- 用户流失率
- 用户复购率
- 用户回购率
一、导入库
import pandas as pd
import numpy as np
import datetime
import time
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['Arial Unicode MS']
matplotlib.rcParams['axes.unicode_minus']=False
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn
from sklearn.preprocessing import LabelEncoder
np.set_printoptions(suppress=True)
pd.set_option('display.float_format', lambda x: '%.4f' % x)
二、 用户注册日期分布
我们可以跟住用户注册日期的分布,去判断用户集中在开课前多久选择去注册这一门课。
module=sorted(regi["code_module"].unique().tolist())
presentation=sorted(regi["code_presentation"].unique().tolist())
这里需要注意的是,不是每一学期都会开展这七门课
fig,axes=plt.subplots(7,4,figsize=(14,14))
for m in range(len(module)):
for p in range(len(presentation)):
if len(regi[(regi["code_module"]==module[m])&(regi["code_presentation"]==presentation[p])]["date_registration"])==0:
axes[m][p].axis('off')
else:
sns.distplot(regi[(regi["code_module"]==module[m])&(regi["code_presentation"]==presentation[p])]["date_registration"],norm_hist=True,ax=axes[m][p])
axes[m][p].set_title(module[m]+" in "+presentation[p])
plt.tight_layout()
从分布图来看,大部分学生都在开学前完成注册,并在开学前50天至开学当天,会有一个注册的小高峰。
二、用户延迟注册率
即date_unregistration>0,在开学后注册的学生比率。
对数据进行聚合处理一下,用groupby的方法计算每学期每门课的每一天都有多少人注册。
line_plot_df=regi.groupby(["code_presentation","code_module","date_registration"]).agg({
"id_student":pd.Series.nunique}).rese